import Vuex from 'vuex'; // 导入Vuex库
import Vue from 'vue'; // 导入Vue库
import VuexPersist from 'vuex-persist'; // 导入Vuex持久化插件
import bookList from './bookList'; // 导入产品列表模块
import categoryList from './categoryList'; // 导入分类列表模块

Vue.use(Vuex); // 使用Vuex插件

export default new Vuex.Store({
    // Vuex store的state，即状态对象
    state: {
        username: '', // 用户名
        bookList: bookList, // 产品列表数据
        categoryList: categoryList, // 分类列表数据
        book: {}, // 用于存储当前选中产品的详细信息
        cart: [] // 购物车数组，用于存储用户加入购物车的产品信息
    },
    // Vuex store的mutations，即状态变更的方法
    mutations: {
        // 登录mutation，更新用户名
        LOGIN(state, { username }) {
            state.username = username;
        },
        // 注销mutation，清空用户名
        LOGOUT(state) {
            state.username = '';
        },
        // 详情mutation，更新当前选中产品的详细信息
        DETAIL(state, book) {
            state.book = book;
        },
        // 添加到购物车mutation，如果购物车为空或者产品不在购物车中则添加产品，否则增加数量
        ADDCART(state, book) {
            if (state.cart.length == 0) {
                Vue.set(book, 'number', 1)
                state.cart.push(book)
                return;
            }
            for (let index = 0; index < state.cart.length; index++) {
                if (state.cart[index].bookName == book.bookName) {
                    state.cart[index].number++;
                    return;
                }
            }
            Vue.set(book, 'number', 1)
            state.cart.push(book)
        },
        // 增加购物车中产品数量的mutation
        ADD(state, book) {
            state.cart.forEach((item) => {
                if (item.bookName == book.bookName) item.number++;
            })
        },
        // 减少购物车中产品数量的mutation
        SUB(state, book) {
            state.cart.forEach((item) => {
                if (item.bookName == book.bookName) item.number--;
            })
        },
        // 从购物车中删除产品的mutation
        DELETE(state, book) {
            state.cart = state.cart.filter((item) => {
                if (item.bookName != book.bookName) return true;
            })
        },
        // 结算购物车中选中产品的mutation
        PAY(state, selectBook) {
            state.cart = state.cart.filter((item) => {
                let flag = false;
                for (let index = 0; index < selectBook.length; index++) {
                    if (item.bookName == selectBook[index].bookName) {
                        flag = true;
                        break;
                    }
                }
                if (flag) return false;
                else return true;
            })
        },
        // 清空购物车的mutation
        CLEAR(state) {
            state.cart = [];
        }
    },
    // Vuex store的plugins，用于配置插件
    plugins: [
        // 使用vuex-persist插件，将state持久化到localStorage中
        new VuexPersist({
            storage: window.localStorage,
        }).plugin,
    ]
})